import QtQuick 1.0
import "Components"
import "WebAccess/TwitterAPI.js" as TwitterAPI
import "Util/Util.js" as Util

Rectangle {
    x: 0
    y: 0
    width: parent.width
    height: parent.height

    color: "#111111"

    property alias text: _textTweet.text        //入力されているテキストへのアクセス
    property string inReplyToId: ""             //replyの時の情報
    property string inReplyToScreenName: ""     //replyの対象のスクリーンネームこれがツイーとに含まれなければ削除


    //フォーカスを設定する
    function setFocusTextEdit(is){
        if(is){
            _textTweet.setForceActiveFocus();
        }else{
            _textTweet.focus = false;
        }
    }
    // ボタンをフォーカスする
    function setFocusButton(is){
        if(is){
            _buttonTweet.forceActiveFocus();
        }else{
            _buttonTweet.focus = false;
        }
    }


    // リプライのスクリーンネームを挿入する
    function insertReplyScreenName(screen_name, status_id){
        if(screen_name.length === 0){
        }else if(_textTweet.text.indexOf("@" + screen_name) >= 0){
            //既にある
        }else{
            _textTweet.text = "@" + screen_name + " " + _textTweet.text;
            inReplyToId = status_id;
        }
        // カーソルを移動
        _textTweet.moveCursorEnd();
        // フォーカスをセットする
        setFocusTextEdit(true);
    }

    // リプライのスクリーンネームを挿入する（テキストに含まれるのも含む）
    function insertReplyScreenNameWithinText(screen_name, status_id, text){
        var screen_names = Util.pickUpScreenNames(text);
        var my_name = TwitterAPI.getAuthUserName().toLowerCase();

        if(screen_names === null){
        }else{
            for(var i=0; i<screen_names.length; i++){
                if(my_name.indexOf(screen_names[i].toLowerCase()) >= 0){
                    // 自分は除く
                }else{
                    insertReplyScreenName(screen_names[i], status_id);
                }
            }
        }
        insertReplyScreenName(screen_name, status_id);

        // カーソルを移動
        _textTweet.moveCursorEnd();
        // フォーカスをセットする
        setFocusTextEdit(true);
    }

    // QTでメッセージを再設定する
    function setQT(screen_name, status_id, text){
        if(screen_name.length === 0){
        }else{
            _textTweet.text = " QT @"
                                + screen_name
                                + ": "
                                + text;
            inReplyToId = status_id;

            // カーソルを移動
            _textTweet.moveCursorStart();
            // フォーカスをセットする
            setFocusTextEdit(true);
        }
    }

    // DMようにメッセージを再設定する
    function setDM(screen_name){
        if(screen_name.length === 0){
        }else{
            _textTweet.text = "D " + screen_name + " ";

            // カーソルを移動
            _textTweet.moveCursorEnd();
            // フォーカスをセットする
            setFocusTextEdit(true);
        }
    }


    // ついーとの入力ボックス
    TextBox {
        id: _textTweet
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: _buttonTweet.left
        anchors.bottom: parent.bottom

        anchors.leftMargin: 5
        anchors.topMargin: 5
        anchors.rightMargin: 5
        anchors.bottomMargin: 5

        onTextChanged: {
            if(text.length > 0){
//                if( _rootContainer.state === "NoneTweet"){
//                    _rootContainer.state = "";
//                }
                _rootContainer.openTweetContainer(true);
            }
//            if(textActiveFocus === false){
//                var pos = _textTweet.text.indexOf("\t");
////                console.debug(_textTweet.text + ",pos=" + pos + ",len=" + _textTweet.text.length);
//                if(pos === _textTweet.text.length - 1){
//                    _textTweet.text = _textTweet.text.substr(0, _textTweet.text.length - 1);
//                }
//            }

            _buttonTweet.text = "Tweet\n(" + (140 - text.length) + ")";

        }

        onTabPressed: {
            // フォーカス移動
            _rootContainer.setNextFocus(1, true);
        }
        onBacktabPressed: {
            // フォーカス移動
            _rootContainer.setNextFocus(1, false);
        }
        onEnterPressed: {
            if(event.modifiers & Qt.ControlModifier){
                // 送信
                sendTweet();
            }
        }
        onEscapePressed: {
            // 閉じる
            _rootContainer.openTweetContainer(false);
        }

        onPressed: {
            switch(event.key){
            case Qt.Key_F5:
                // 更新
                _contentContainer.update();
                break;
            default:
                break;
            }
        }
    }

    Button {
        id: _buttonTweet
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.bottom: parent.bottom
//        anchors.leftMargin: 5
        anchors.topMargin: 5
        anchors.rightMargin: 5
        anchors.bottomMargin: 5
        width: 50

        text: "Tweet\n(140)"

        onClicked: {
            sendTweet();
        }
        Keys.onEnterPressed: {
            sendTweet();
        }
        Keys.onReturnPressed: {
            sendTweet();
        }
        Keys.onTabPressed: {
            // フォーカス移動
            _rootContainer.setNextFocus(2, true);
        }
        Keys.onBacktabPressed: {
            // フォーカス移動
            _rootContainer.setNextFocus(2, false);
        }
        Keys.onEscapePressed: {
            // 閉じる
            _rootContainer.openTweetContainer(false);
        }
        Keys.onPressed: {
            switch(event.key){
            case Qt.Key_F5:
                // 更新
                _contentContainer.update();
                break;
            default:
                break;
            }
        }
    }

    //つぶやく
    function sendTweet(){
        var len = _textTweet.text.length;
        if(len < 1){
            //トースト表示
            _toast.show("Please input tweet.")
        }else{
            //in reply to が指定されてるのにツイート内容にIDがなければIDは削除
            if(inReplyToId.length > 0){
                if(_textTweet.text.indexOf(inReplyToScreenName) >= 0){
                    //含まれる
                }else{
                    inReplyToId = "";
                }
            }
            //つぶやく
            var obj = new TwitterAPI.sendTweet(_textTweet.text, inReplyToId, onTweetResponse);
            _textTweet.text = "";
        }
    }

    //つぶやきのレスポンス
    function onTweetResponse(object){
        console.debug("onTweetResponse")
//        _textTweet.text = "";
        //        _textTweet.forceActiveFocus();

        //トースト表示
        _toast.show("Sent")
    }
}
